# 1. 实现菜单函数，输出下列信息，返回用户输入的编号，并进行输入校验。
#
#     print("****************************************")
#     print("*                                学生管理系统                         *")
#     print("*              1. 添加新学生信息              *")
#     print("*             2. 通过学号修改学生信息                 *")
#     print("*                3. 通过学号删除学生信息                 *")
#     print("*                4. 通过姓名删除学生信息                 *")
#     print("*             5. 通过学号查询学生信息          *")
#     print("*                6. 通过姓名查询学生信息          *")
#     print("*                7. 显示所有学生信息             *")
#     print("*                8. 退出系统                                           *")
#     print("****************************************")
#     select_op = input("输入编号选择操作：")
#
# 2. 实现控制函数，用来控制菜单的输出与功能的选择，直到用户选择8，结束程序运行。
# 3. 实现添加学生函数，函数参数为编号，姓名，年龄，性别四个参数，返回是否添加成功的结果，要求编号不可重复。
# 4. 实现修改函数，参数为学号，如果学生存在，则进行修改，不存在输出提示，并返回是否修改成功
# 5. 实现删除函数，参数为学号，如果学生存在，则进行删除，不存在输出提示，并返回是否删除成功
# 6. 实现删除函数，参数为姓名，如果学生存在，则进行删除（同名学生全部删除），不存在输出提示，并返回是否删除成功
# 7. 实现查询函数，参数为学号，如果学生存在，则输出学生信息，不存在输出提示，并返回是否查询成功
# 8. 实现查询函数，参数为姓名，如果学生存在，则输出学生信息（同名学生全部输出），不存在输出提示，并返回是否删除成功
# 9. 实现函数，输出所有学生信息
from os import remove

# 定义一个全局变量，用来保存学生的信息，方法各个函数之间进行访问
students = []

# 9. 实现函数，输出所有学生信息
def input_all_info():
    for s in students:
        print(f'学生姓名：{s["name"]} 学号：{s["sid"]}')


# 8. 实现查询函数，参数为姓名，如果学生存在，则输出学生信息（同名学生全部输出），不存在输出提示，并返回是否查询成功
def select_name_student():
    name = input('请输入查询的学生姓名：')
    if not students:
        print('学生信息为空，请先添加再查询')
        return '查询失败'
    flag = False
    is_same_name = []
    for s in students:
        if s['name'] == name:
            is_same_name.append(s)
            flag = True
    if flag:
        for s in is_same_name:
            print(s)
        print('查询成功')
        return '查询成功'
    else:
        print('查询失败')
        return '查询失败'

# 7. 实现查询函数，参数为学号，如果学生存在，则输出学生信息，不存在输出提示，并返回是否查询成功
def select_num_student():
    sid = input('请输入查询的学生学号：')
    if not students:
        print('学生信息为空，请先添加')
        return '查询失败'
    for s in students:
        if sid == s['sid']:
            print(f'姓名：{s["name"]} 学号：{sid}')
            return '查询成功'
    print("查询失败,学生不存在")
    return "查询失败"


# 6. 实现删除函数，参数为姓名，如果学生存在，则进行删除（同名学生全部删除），不存在输出提示，并返回是否删除成功
def del_name_student():
    name = input('请输入删除学生姓名：')
    if not students:
        print('学生信息为空，请先添加学生')
        return '删除失败'
    flag = False
    for s in students[:]:
        if s['name'] == name:
            students.remove(s)
            flag = True
    if flag:
        print('该学生已删除')
        return '删除成功'
    else:
        print('删除失败')
        return '删除失败'


# 5. 实现删除函数，参数为学号，如果学生存在，则进行删除，不存在输出提示，并返回是否删除成功
def del_num_student():
    sid = input('请输入删除的学生学号：')
    if not students:
        print('学生信息为空，请添加学生，再进行删除操作')
        return '删除失败'
    for i,s in enumerate(students): #enumerate 是 Python 的一个内置函数，它用于在循环中同时获取列表的索引和元素
        print(i,s)
        if s['sid'] == sid:
            students.pop(i)
            print('该学生已删除')
            return '删除成功'
    print('该学生不存在，删除失败')
    return '删除失败'



# 4. 实现修改函数，参数为学号，如果学生存在，则进行修改，不存在输出提示，并返回是否修改成功
def alter_student():
    sid = input('请输入要修改的学号：')
    if not students:
        print('学生信息为空，请添加学生')
        return '添加失败'
    for s in students:
            if s['sid'] == sid:
                s['name'] = input('请输入学生姓名：')
                print('学生存在,已修改')
                return '修改成功'

    print('学号不存在，请重新输入')
    return '修改失败'


# 3. 实现添加学生函数，函数参数为编号，姓名，年龄，性别四个参数，返回是否添加成功的结果，要求编号不可重复。
def add_student():
    sid = input('请输入学生ID：')
    name = input('请输入学生姓名：')
    for s in students:
        if s['sid'] == sid:
            print('学号已存在，添加失败')
            return '添加失败'
    else:
        student = {'sid':sid,'name':name}
        students.append(student)
        print('添加学生信息成功')
        return '添加成功'

def menu():
    # 1. 实现菜单函数，输出下列信息，返回用户输入的编号，并进行输入校验。
    # 2.实现控制函数，用来控制菜单的输出与功能的选择，直到用户选择8，结束程序运行。
    while(True):
        print("****************************************")
        print("*                                学生管理系统                         *")
        print("*              1. 添加新学生信息              *")
        print("*             2. 通过学号修改学生信息                 *")
        print("*                3. 通过学号删除学生信息                 *")
        print("*                4. 通过姓名删除学生信息                 *")
        print("*             5. 通过学号查询学生信息          *")
        print("*                6. 通过姓名查询学生信息          *")
        print("*                7. 显示所有学生信息             *")
        print("*                8. 退出系统                                           *")
        print("****************************************")

        select_op = int(input("输入编号选择操作："))

        if select_op < 9:
            if select_op == 1:
                # 添加学生信息
                add_student()
                print(students)

            elif select_op == 2:
                # 修改学生信息
                alter_student()
                print(students)

            elif select_op == 3:
                # 根据学号删除学生信息
                del_num_student()
                print(students)

            elif select_op == 4:
                # 根据姓名删除学生信息
                del_name_student()
                print(students)

            elif select_op == 5:
                # 根据学号查询学生信息
                select_num_student()
                print(students)
            elif select_op == 6:
                # 根据姓名查询学生信息
                select_name_student()
                print(students)
            elif select_op == 7:
                # 显示所有学生信息
                input_all_info()
                print(students)

            else:
                # 退出系统
                break
        else:
            print("输入有误，请重新输入！")

menu()